home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / eamon_1.zip / MAINPROG.BAS < prev    next >
BASIC Source File  |  1986-06-23  |  24KB  |  511 lines

  1. 1 RANDOMIZE VAL(RIGHT$(TIME$,2))
  2. 2 REM
  3. 3 REM Basic dungeon program
  4. 4 REM Origionaly made by Donald Brown (bless his soul)
  5. 5 REM Converted with modifications by Jon Walker,139 S. Central Ave
  6. 6 REM Marshfield, WI, 54449 (no Lithuanian currency please!)
  7. 7 REM
  8. 8 REM
  9. 10 REM   CNAME$: CHARACTER NAME      HD: HARDINESS  AG: AGILITY  CH: CHARISMA
  10. 15 REM
  11. 20 REM   SA(1)-SA(4):SPELL ABILITIES
  12. 30 REM   WA(1)-WA(5):WEAPON ABILITIES
  13. 35 REM
  14. 40 REM   AE: AMROUR EXPERT.  SEX$: M OR F  GOLD: ON PERSON  BANK: GOLD IN BANK
  15. 50 REM   AC: ARMOUR CLASS  
  16. 60 REM 
  17. 70 REM WEAPON INFO:
  18. 80 REM     WNAME$: WEAPON NAME
  19. 85 REM
  20. 86 REM
  21. 87 DEF FND$(X$)=MID$(X$,INSTR(X$,".")+1)+CHR$(10)+CHR$(13)
  22. 88 REM
  23. 90 CLS:FOR I=1 TO 10:PRINT :NEXT I:PRINT"         Please wait while you travel to the DUNGEON" :REM  /////CHANGE THIS AS NEEDED/////
  24. 95 GOTO 22000
  25. 96 REM
  26. 100 REM /// give room description if never here, then get command
  27. 110 PRINT
  28. 115 IF SPD>0 THEN SPD=SPD-1:IF SPD=0 THEN MD(0,2)=MD(0,2)/2:MD(0,10)=MD(0,10)-2*MD(0,2)
  29. 117 IF ROOM < 89 AND (AD(1,4) <> ROOM AND AD(1,4) <> -1) THEN PRINT: PRINT"It is too dark to see anything.":GOTO 160
  30. 120 IF V(ROOM) THEN GET#2,ROOM:PRINT"You are standing in ";R2$
  31. 125 IF NOT V(ROOM) THEN GET#1,ROOM:PRINT FND$(R1$):IF ROOM=16 THEN DIE = -1:GOTO 23000
  32. 130 FOR M=1 TO NM:IF MD(M,5)=ROOM AND MD(M,15) THEN PRINT MN$(M);" is here."
  33. 135 IF MD(M,5)=ROOM AND MD(M,15)=0 THEN GET#3,M+NZ:PRINT FND$(R3$):MD(M,15)=-1
  34. 140 NEXT M:FOR A=1 TO NA-1:IF AD(A,4)=ROOM AND (A<NA) AND NOT V(ROOM) THEN GET#3,A:PRINT FND$(R3$)
  35. 145 IF AD(A,4)=ROOM AND (A<NA) AND V(ROOM) THEN PRINT"You see ";AN$(A)
  36. 150 NEXT A:IF AD(NA,4)=ROOM THEN PRINT"Your ";AN$(A);" is here."
  37. 155 V(ROOM)=-1
  38. 157 IF RZ=0 AND ROOM=52 THEN PRINT:PRINT E1$
  39. 160 PRINT:LINE INPUT"   Your command ?";A$
  40. 161 IF A$="" THEN A$=CZ$:PRINT:PRINT A$
  41. 163 GOSUB 31000
  42. 175 CZ$=A$:A=INSTR(2,A$," ")
  43. 180 IF A<>0 THEN V$=LEFT$(A$,A-1):S$=MID$(A$,A+1) ELSE V$=A$:S$=""
  44. 185 IF LEFT$(S$,1)=" " THEN S$=MID$(S$,2):GOTO 185
  45. 190 FOR C=1 TO NC:IF C$(C)=V$ OR C$(C)=S$ THEN 195 ELSE NEXT C
  46. 191 PRINT"Huh? I only understand these commands--"
  47. 192 FOR C=1 TO NC:PRINT C$(C);SPACE$(30-LEN(C$(C)));
  48. 193 IF C/2=INT(C/2) THEN PRINT
  49. 194 NEXT C:PRINT:PRINT:GOTO 160
  50. 195 IF C$(C)=S$ THEN S$=V$:V$=C$(C)
  51. 200 ON C GOTO 1000,1000,2000,3000,4000,4000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,6000,7000,8000,10000,11000,11000,13000,14000,15000,16000,17000,17000,17000,18000,18000,19000,21000,21500,21500,9000
  52. 300 REM ///
  53. 301 REM /// commands return here
  54. 310 IF NOT NBTL THEN 440
  55. 320 FOR M=1 TO NM:IF MD(M,5)<>ROOM THEN 430
  56. 330 MR=FD(MD(M,14))/TD(MD(M,14))-FD(ABS(MD(M,14)=0))/TD(ABS(MD(M,14)=0))/5+INT(41*RND(1)-20)
  57. 340 IF MD(M,4)<MR THEN PRINT:PRINT MN$(M);" flees out an exit.":PRINT:GOSUB 17500:MD(M,5)=R2:TD(MD(M,14))=TD(MD(M,14))-MD(M,1):FD(MD(M,14))=FD(MD(M,14))-MD(M,13):GOTO 430
  58. 350 IF MD(M,14)<>0 THEN 390
  59. 360 OF=M:IF TD(1)=MD(0,1) THEN DF=0:GOSUB 3500:GOTO 430
  60. 370 SKIP=0:FOR M2=1 TO NM:IF MD(M2,5)=ROOM AND (MD(M2,14)<>0) AND RND(1)<.25 THEN DF=M2:GOSUB 3500:M2=200:SKIP=-1
  61. 380 NEXT M2:IF SKIP THEN 430 ELSE DF=0:GOSUB 3500:GOTO 430
  62. 390 OF=M
  63. 400 SKIP=0:FOR M2=1 TO NM:IF MD(M2,5)=ROOM AND MD(M2,14)=0 THEN DF=M2:GOSUB 3500:M2=200:SKIP=-1
  64. 410 NEXT M2:IF SKIP THEN 430 ELSE 400
  65. 420 REM
  66. 430 NBTL=(FD(0)<TD(0))
  67. 435 IF NBTL THEN NEXT M
  68. 440 REM
  69. 450 GOTO 100
  70. 460 REM
  71. 470 REM
  72. 1000 REM /// get command
  73. 1010 GOSUB 1950
  74. 1030 IF S$="ALL" THEN 1120
  75. 1040 IF S$="GOLD" THEN S$=AN$(6)
  76. 1050 IF S$="SILVER" THEN S$=AN$(12)
  77. 1080 FOR A=1 TO NA:IF AN$(A)<> S$ OR AD(A,4)<>ROOM THEN NEXT A:PRINT:PRINT"I see no ";S$;" here!":PRINT:GOTO 100
  78. 1085 IF A=10 THEN GOSUB 1160
  79. 1090 IF WT+AD(A,3)>10*MD(0,1) THEN PRINT:PRINT"It is too heavy for you.":PRINT:GOTO 100
  80. 1100 PRINT:PRINT"Got it.":AD(A,4)=-1:WT=WT+AD(A,3):PRINT:IF AD(A,2)<2 OR MD(0,9)<>-1 THEN 300
  81. 1110 GOTO 16000
  82. 1115 IF A=10 THEN GOSUB 1160
  83. 1120 FOR A=1 TO NA:IF AD(A,4)<>ROOM THEN 1150
  84. 1130 IF WT+AD(A,3)>10*MD(0,1) THEN PRINT AN$(A);" is too heavy.":GOTO 1150
  85. 1140 PRINT AN$(A);" taken.":AD(A,4)=-1:WT=WT+AD(A,3)
  86. 1150 NEXT A:PRINT:GOTO 300
  87. 1160 PRINT:PRINT"As you touch the jewel, an electric shock runs up your arm.  You hear a voice":PRINT"chuckling, as it says 'I told you not to touch it!":PRINT:MD(0,13)=MD(0,13)+MD(0,1)/2
  88. 1170 DF=0:IF MD(0,13) >= MD(0,1) THEN 3700
  89. 1180 GOTO 3665
  90. 1950 IF S$="" THEN PRINT:PRINT C$(C);" what ";:A3$=A$:INPUT A$:GOSUB 31000:S$=A$:A$=A3$:GOTO 1950
  91. 1955 A$=S$:GOSUB 31000:S$=A$
  92. 1960 RETURN
  93. 2000 REM /// drop command
  94. 2010 GOSUB 1950
  95. 2020 IF NBTL THEN PRINT:PRINT"You can't do that with unfriendlies about!":PRINT:GOTO 100
  96. 2030 IF S$="ALL" THEN 2060
  97. 2040 FOR A=1 TO NA:IF AN$(A)<>S$ OR AD(A,4)<>-1 THEN NEXT A:PRINT"You aren't carrying a ";S$:GOTO 100
  98. 2050 WT=WT-AD(A,3):PRINT:PRINT"Dropped.":AD(A,4)=ROOM:PRINT:GOTO 300
  99. 2060 FOR A=1 TO NA:IF AD(A,4)<>-1 THEN 2080
  100. 2070 WT=WT-AD(A,3):AD(A,4)=ROOM:PRINT AN$(A);" dropped."
  101. 2080 NEXT A:GOTO 300
  102. 3000 REM /// attack command
  103. 3010 GOSUB 1950
  104. 3020 IF S$ = "KNIGHT" THEN S$ = MN$(4)
  105. 3022 IF S$ = "BUNNY" OR S$ = "RABBIT" THEN S$ = MN$(2)
  106. 3024 IF S$ = "EYE" THEN S$ = MN$(3)
  107. 3030 FOR M=1 TO 3:IF MD(M,5)=ROOM THEN S$=MN$(M)
  108. 3040 NEXT M
  109. 3050 FOR M=1 TO NM:IF S$<>MN$(M) OR MD(M,5)<>ROOM THEN NEXT M:PRINT:PRINT"Attack who?":PRINT:GOTO 100
  110. 3060 IF MD(0,9)=-1 THEN PRINT:PRINT"You have no weapon ready!":PRINT:GOTO 100
  111. 3070 OF=0:DF=M:GOSUB 3500:IF NOT HIT THEN 3130
  112. 3080 IF INC<>0 THEN W2=AD(MD(0,9),6):WA(W2)=WA(W2)+2
  113. 3090 IF -EA<=AE THEN 300
  114. 3100 IF INT(100*RND(1)+1)<=MD(0,10) THEN 3130
  115. 3110 A=2:IF EA+AE=1 THEN A=1
  116. 3120 AE=AE+A:MD(0,10)=MD(0,10)+A
  117. 3130 IF MD(DF,14)=0 OR DF=0 THEN 300
  118. 3140 MD(DF,3)=MD(DF,3)/2:IF NBTL THEN MD(DF,14)=0:TD(0)=TD(0)+MD(DF,1):TD(1)=TD(1)-MD(DF,1):FD(0)=FD(0)+MD(DF,13):FD(1)=FD(1)-MD(DF,13):GOTO 300
  119. 3150 R2=ROOM:MD(DF,14)=0:GOTO 5100
  120. 3400 REM //MONSTER PICK UP WEAPON
  121. 3410 IF MD(OF,10) = 0 THEN RETURN
  122. 3420 FOR A = 1 TO NA : IF AD(A,4) <> ROOM OR AD(A,2) < 2 THEN NEXT : RETURN
  123. 3430 PRINT MN$(OF);" picks up ";AN$(A): PRINT : AD(A,4) = 0 : MD(OF,9) = A : MD(OF,10) = MD(OF,10) + AD(A,5) : RETURN
  124. 3500 HIT=0:IF MD(OF,9)=-1 THEN RETURN
  125. 3505 PRINT MN$(OF);" attacks ";MN$(DF):PRINT" -- ";
  126. 3510 RL=INT(100*RND(1)+1):HIT=0:IF RL<5 OR RL<MD(OF,10) THEN HIT=-1
  127. 3515 IF HIT THEN 3600
  128. 3520 IF RL<97 THEN PRINT"a miss.":RETURN
  129. 3525 PRINT"a fumble!":FR=INT(100*RND(1)+1):IF FR<=35+40*ABS(MD(OF,9)=0) THEN PRINT" fumble recovered.":PRINT:RETURN
  130. 3530 IF FR<76 THEN PRINT" weapon dropped!":AD(MD(OF,9),4)=ROOM:MD(OF,9)=-1:PRINT:RETURN
  131. 3535 IF FR>95 THEN 3550
  132. 3540 PRINT" weapon broken!":AD(MD(OF,9),4)=0:MD(OF,9)=-1:IF RND(1)>.9 THEN PRINT:RETURN
  133. 3545 PRINT" Broken weapon hurts user!"
  134. 3550 IF FR=100 THEN 3560
  135. 3555 D=MD(OF,11):S=MD(OF,12):DF=OF:A=1:GOTO 3650
  136. 3560 D=MD(OF,11)*2:S=MD(OF,12):DF=OF:A=0:GOTO 3650
  137. 3600 INC=INT(100*RND(1)+1)>MD(OF,10):MD(OF,10)=MD(OF,10)+2*(-INC)
  138. 3605 D=MD(OF,11):S=MD(OF,12):A=1:IF RL>5 THEN PRINT"a hit!":GOTO 3650
  139. 3610 PRINT"a critical hit!":R2=INT(100*RND(1)+1):IF R2<51 THEN A=0:GOTO 3650
  140. 3615 IF R2<86 THEN S=1.5*S:GOTO 3650
  141. 3620 IF R2<96 THEN D=2*D:GOTO 3650
  142. 3625 IF R2<100 THEN D=3*D:GOTO 3650
  143. 3630 GOTO 3700
  144. 3650 D2=0:FOR D3=1 TO D:D2=D2+INT(S*RND(1)+1):NEXT D3:D2=D2-A*MD(DF,8):IF D2<1 THEN PRINT" blow bounces off armour":PRINT:RETURN
  145. 3655 MD(DF,13)=MD(DF,13)+D2:IF MD(DF,13)>=MD(DF,1) THEN 3700
  146. 3660 A=MD(DF,14):FD(A)=FD(A)+D2
  147. 3665 ON INT(MD(DF,13)*5/MD(DF,1)+1) GOTO 3670,3675,3680,3685,3690
  148. 3670 PRINT:PRINT MN$(DF);" takes damage but is still in good shape.":RETURN
  149. 3675 PRINT:PRINT MN$(DF);" is hurting.":RETURN
  150. 3680 PRINT:PRINT MN$(DF);" is in pain.":RETURN
  151. 3685 PRINT:PRINT MN$(DF);" is very badly injured.":RETURN
  152. 3690 PRINT:PRINT MN$(DF);"is at death's door, knocking loudly.":RETURN
  153. 3700 PRINT MN$(DF);" is dead!":PRINT:A=MD(DF,14):FD(A)=FD(A)+MD(DF,1)-MD(DF,13)+D2:MD(DF,5)=0:A2=NZ-NM+DF:AD(A2,4)=ROOM:IF MD(DF,9)>0 THEN AD(MD(DF,9),4)=ROOM
  154. 3710 IF FD(0)>TD(0) THEN NBTL=0
  155. 3720 IF DF=0 THEN DIE=-1:GOTO 23010
  156. 3730 IF (MN$(DF)="SKELETON" OR MN$(DF) = "HIGH PRIEST") AND AD(2,4) = 0 THEN PRINT:PRINT"A skeleton key drops from his clutches":PRINT:AD(2,4)=ROOM
  157. 3750 PRINT:RETURN
  158. 3760 REM
  159. 4000 REM /// look command
  160. 4010 IF NBTL THEN 2020
  161. 4030 V(ROOM)=0
  162. 4040 FOR A=1 TO NZ:IF AN$(A)=S$ AND (AD(A,4)=ROOM OR AD(A,4)=-1) THEN GET#3,A:PRINT FND$(R3$)
  163. 4050 NEXT A
  164. 4060 GOTO 100
  165. 4080 REM
  166. 5000 REM /// movement command
  167. 5010 IF NBTL THEN 2020
  168. 5020 FOR D=1 TO 6:IF LEFT$(V$,1)<>MID$("NSEWUD",D,1) THEN NEXT
  169. 5030 R2=MAP(ROOM,D)
  170. 5040 IF R2>0 THEN 5100
  171. 5045 REM /// put special moves here
  172. 5050 IF R2=-999 THEN PRINT:PRINT"You successfully ride off into the sunset.":GOTO 23010
  173. 5060 IF R2 = 0 THEN 5090
  174. 5070 IF AD(3,4)=ROOM THEN R2=-R2:GOTO 5100
  175. 5080 IF ROOM = 54 AND AD(17,4)=0 THEN R2=-R2:GOTO 5100
  176. 5090 PRINT:PRINT"You can't go that way!":V(ROOM)=0:GOTO 100
  177. 5100 R3=ROOM:ROOM=R2:TD(0)=0:TD(1)=MD(0,1):FD(0)=0:FD(1)=MD(0,13)
  178. 5110 FOR M=1 TO NM:IF MD(M,5)=R3 THEN IF MD(M,14)<>0 THEN MD(M,5)=ROOM:GOTO 5150
  179. 5120 IF MD(M,5)<>ROOM THEN 5160
  180. 5140 IF MD(M,14)=0 THEN NBTL=1
  181. 5150 A=MD(M,14):FD(A)=FD(A)+MD(M,13):TD(A)=TD(A)+MD(M,1)
  182. 5160 NEXT M:NBTL=(TD(0)>0)
  183. 5165 IF (R2>8 AND R2<17) OR (R3>8 AND R3<17) THEN AD(3,4)=ROOM
  184. 5170 GOTO 100
  185. 6000 REM /// power spell
  186. 6010 S=4:GOSUB 7500:IF NOT SUC THEN 300
  187. 6020 RAISE=0:FOR M=1 TO NM:M2=13+M:IF AD(M2,4)=ROOM OR AD(M2,4)=-1 THEN RAISE=-1:PRINT MN$(M);" come alive!":AD(M2,4)=0:MD(M,5)=ROOM:MD(M,13)=0:IF MD(M,9)>0 THEN AD(MD(M,9),4)=0:IF MD(M,9)=MD(0,9) THEN MD(0,9)=0
  188. 6030 NEXT M:IF RAISE THEN NBTL=0:R2=ROOM:GOTO 5100
  189. 6040 FOR A=1 TO NA:IF AD(A,4)=ROOM THEN RAISE=-1:PRINT AN(A);" vanishes!":AD(A,4)=0
  190. 6050 NEXT A:IF RAISE THEN PRINT:GOTO 300
  191. 6060 RR=INT(100*RND(1)+1):IF RR<11 THEN PRINT:PRINT"The section of tunnel you are in collapses and you die.":DIE=1:GOTO 23010
  192. 6070 IF RR<31 THEN PNT:PRINT"You are teleported somewhere in the dungeon":PRINT:R2=INT(26*RND(1)+1):NBTL=0:GOTO 5100
  193. 6080 IF RR<86 THEN PRINT:PRINT"You hear a very loud sonic boom that echoes through the tunnels.":PRINT:GOTO 300
  194. 6090 IF RR>95 THEN PRINT:PRINT"All of your hits are healed.":PRINT:MD(0,13)=0:GOTO 300
  195. 6100 GOTO 10020
  196. 7000 REM /// heal spell
  197. 7010 S=2:GOSUB 7500:IF NOT SUC THEN 300
  198. 7020 PRINT:IF MD(0,13)<>0 THEN PRINT"Some of your wounds seem to clear up.":PRINT
  199. 7030 MD(0,13)=MD(0,13)-INT(10*RND(1)+1):IF MD(0,13)<0 THEN MD(0,13)=0
  200. 7040 ON INT(MD(DF,13)*5/MD(DF,1)+1) GOTO 7045,7050,7060,7070,7080
  201. 7045 PRINT"You feel great!.":PRINT:GOTO 7100
  202. 7050 PRINT"You feel much better.":PRINT :GOTO 7100
  203. 7060 PRINT"You feel better.":PRINT:GOTO 7100
  204. 7070 PRINT"Though you feel better, you are still very,very sick!":PRINT :GOTO 7100
  205. 7080 PRINT"Though you feel better, you are still at death's door knocking loudly!":PRINT
  206. 7090 REM
  207. 7100 GOTO 300
  208. 7495 REM
  209. 7496 REM try out success on spell
  210. 7497 REM
  211. 7500 SUC=0:IF SA(S)<>0 THEN RL=INT(100*RND(1)+1):SUC=(((RL<=S2(S)) OR (RL<5)) AND (RL<95))
  212. 7510 IF NOT SUC THEN PRINT:PRINT"Nothing happened.":RETURN
  213. 7520 RL=INT(100*RND(1)+1):IF RL>S2(S) THEN S2(S)=S2(S)+2:SA(S)=SA(S)+2
  214. 7525 IF RL=100 THEN SA(S)=0:S2(S)=0:PRINT"The power required to cast this spell overloaded your mind and you forgot it!"
  215. 7530 S2(S)=S2(S)/2
  216. 7540 RETURN
  217. 8000 REM /// blast spell (alright!!!)
  218. 8010 GOSUB 1950
  219. 8020 FOR M=1 TO NM:IF S$<>MN$(M) OR MD(M,5)<>ROOM THEN NEXT M:PRINT:PRINT"You can't blast ";S$;"!":PRINT:GOTO 300
  220. 8030 S=1:GOSUB 7500:IF NOT SUC THEN 300
  221. 8040 PRINT:PRINT"Direct hit!":PRINT:S=5:D=1:DF=M:MD(M,14)=0:GOSUB 3650:PRINT:GOTO 300
  222. 9000 REM ///DIG COMMAND
  223. 9010 IF NBTL THEN 2020
  224. 9020 IF AD(9,4)<>-1 THEN PRINT:PRINT"The ground is too hard to dig with your hands.":PRINT:GOTO 300
  225. 9030 IF ROOM <> 27 OR AD(6,4) <> 0 THEN PRINT:PRINT:YOU FIND NOTHING.":PRINT:GOTO 300
  226. 9040 PRINT:PRINT"You find a bag of gold coins!":PRINT:AD(6,4)=ROOM:GOTO 300
  227. 10000 REM /// speed spell
  228. 10010 S=3:GOSUB 7500:IF NOT SUC THEN 300
  229. 10020 IF SPD=0 THEN MD(0,10)=MD(0,10)+2*MD(0,2):MD(0,2)=2*MD(0,2)
  230. 10030 SPD=INT(25*RND(1)+1:PRINT:PRINT"You can feel the new agility flowing through you!":PRINT:GOTO 300
  231. 11000 REM /// smile & wave command
  232. 11010 FOR I=1 TO NM
  233. 11020 PRINT MN$(I);
  234. 11030 IF MD(I,14)=0 THEN PRINT" growls at you." :GOTO 11040
  235. 11035 IF V$="WAVE" THEN PRINT " waves back." ELSE PRINT " smiles back."
  236. 11040 NEXT I
  237. 11050 GOTO 100
  238. 13000 REM /// say command
  239. 13010 GOSUB 1950
  240. 13020 IF S$="MAGIC" AND AD(8,4)=0 AND ROOM=5 THEN PRINT:PRINT"As you say the word, there is a small eruption from the center of the stone     and an emerald pops out from it.":PRINT:AD(8,4)=ROOM
  241. 13030 IF S$="POWER" THEN 6000
  242. 13040 IF S$="HEAL" THEN 7000
  243. 13050 IF S$="BLAST" THEN 8000
  244. 13060 IF S$="SPEED" THEN 10000
  245. 13070 PRINT:PRINT"Okay, '";S$;"'":PRINT:GOTO 300
  246. 14000 REM /// drink command
  247. 14010 GOSUB 1950
  248. 14020 IF NBTL THEN 2020
  249. 14500 IF S$<>"WATER" OR RIGHT$(S$,3)<>"SEA" THEN PRINT:PRINT"A job similar to getting blood from a turnup.":PRINT:GOTO 300
  250. 14510 IF MD(5,4)<>-1 AND MD(5,4)<>ROOM AND (ROOM<6 OR ROOM>27) THEN PRINT:PRINT"There is no ";S$;" here!":PRINT:GOTO 300
  251. 14520 PRINT:PRINT"The water tasted salty, but it doesn't seem to be poisonous.":PRINT:IF MD(5,4) THEN MD(5,4)=0
  252. 14530 GOTO 300
  253. 15000 REM ///read command
  254. 15010 GOSUB 1950
  255. 15020 IF NBTL THEN 2020
  256. 15030 IF (S$="BOOK" OR S$="BOOKS" OR S$=AN$(11)) AND (AD(11,4)=-1 OR AD(11,4)=ROOM) THEN PRINT:PRINT"You cannot understand the words.":PRINT:GOTO 300
  257. 15040 IF S$="WORD" OR S$="CIGAM" OR S$="MAGIC" THEN IF ROOM = 5 THEN 13000
  258. 15110 PRINT"I see no markings here!"
  259. 15120 GOTO 300
  260. 16000 REM ///ready a weapon
  261. 16010 GOSUB 1950
  262. 16020 FOR A=1 TO NA:IF AN$(A)<>S$ OR AD(A,4)<>-1 THEN NEXT A:PRINT:PRINT"You aren't carrying it!":PRINT:GOTO 100
  263. 16030 IF AD(A,2)<2 THEN PRINT:PRINT"That isn't a weapon!":PRINT:GOTO 100
  264. 16040 MD(0,10)=(EA+AE)*ABS(-EA>AE)+AD(A,4)+WA(AD(A,6))+2*MD(0,2):MD(0,9)=A:MD(0,11)=AD(A,7):MD(0,12)=AD(A,8)
  265. 16050 PRINT" readied.":PRINT:GOTO 300
  266. 16070 REM
  267. 17000 REM ///flee command
  268. 17010 IF NOT NBTL THEN PRINT:PRINT"What are you fleeing from?":PRINT:GOTO 100
  269. 17030 M=0:GOSUB 17500
  270. 17040 NBTL=0:GOTO 5100
  271. 17500 ' map is in memory now
  272. 17510 R2=MAP(ROOM,INT(6*RND(1)+1)):IF R2<1 THEN 17510
  273. 17520 RETURN
  274. 18000 REM /// inventory command
  275. 18005 PRINT:PRINT"You are carrying the following --":FOR A=1 TO NA:IF AD(A,4)=-1 THEN PRINT"  ";AN$(A);:IF MD(0,9)=A THEN PRINT"  (Ready Weapon)" ELSE PRINT
  276. 18010 NEXT A:GOTO 100
  277. 19000 REM /// enter command
  278. 19005 IF NBTL THEN 2020
  279. 19010 GOSUB 1950
  280. 19020 IF S$<>"WATER" AND S$<>"SEA" THEN 19040
  281. 19030 PRINT:PRINT"Sorry, but I'm afraid to go into the water without my life preserver!":PRINT:GOTO 300
  282. 19040 IF S$="BOAT" THEN PRINT:PRINT"Okay.":PRINT:GOTO 300
  283. 19050 PRINT:PRINT"I'm not sure what you mean by that.  Try giving a direction to move.":PRINT:GOTO 100
  284. 19060 REM
  285. 20000 REM /// give command
  286. 20001 GOSUB 1950
  287. 20003 PRINT:INPUT"To Who ";M1$:IF M1$="" THEN 20003
  288. 20004 A$=M1$:GOSUB 31000:M1$=A$
  289. 20005 FOR M1=1 TO NM:IF MN$(M1)=M1$ AND MD(M1,5)=ROOM THEN 20010
  290. 20006 NEXT M1:PRINT:PRINT"Give ";S$;" to who??":PRINT:GOTO 100
  291. 20010 FOR I1=1 TO NA
  292. 20030 IF S$<>AN$(I1) OR AD(I1,4)<>-1 THEN 20100
  293. 20040 IF AD(I1,2)<2  OR MD(I1,14)=0 THEN PRINT:PRINT"It is refused.":GOTO 300
  294. 20050 MD(M1,9)=I1:PRINT:PRINT MN$(M1);" takes it."
  295. 20090 GOTO 300
  296. 20100 NEXT I1
  297. 20110 PRINT"You aren't carrying ";S$;"!"
  298. 21000 REM ///open command
  299. 21010 IF NBTL THEN 2020
  300. 21020 IF S$<>"COFFIN" OR ROOM <> AD(16,4) THEN 21050
  301. 21030 IF E1 THEN PRINT : PRINT "You can't open it.": PRINT : GOTO 300
  302. 21040 E1=-1:PRINT:PRINT"As you begin to open the lid, a skeleton jumps out and attacks you as the lid":PRINT"slams back shut.":PRINT:MD(1,5)=ROOM:R2=ROOM:GOTO 5100
  303. 21050 IF S$="DOOR" AND ROOM <> AD(17,4) THEN PRINT:PRINT"The door will open when you move through it.":PRINT:GOTO 100
  304. 21060 IF S$="DOOR" OR S$="GRATE" OR S$="IRON GRATE" THEN 20000
  305. 21070 PRINT:PRINT"Would you have any bloody ideas how?":GOTO 100
  306. 21500 REM ///UNLOCK COMMAND
  307. 21510 IF NBTL THEN 2020
  308. 21520 GOSUB 1950:IF LEFT$(S$,3) <> "DOO" AND LEFT$(S$,3) <> "GRA" AND LEFT$(S$,3) <> "IRO" THEN 21560
  309. 21530 IF ROOM <> AD(17,4) THEN PRINT:PRINT"It isn't locked.":PRINT:GOTO 300
  310. 21540 IF AD(2,4) <> -1 THEN PRINT:PRINT"You aren't carrying a key to unlock it with!":PRINT:GOTO 100
  311. 21550 PRINT:PRINT"As you unlock the iron grate, it crunbles into dust.":PRINT:AD(17,4)=0:GOTO 300
  312. 21560 FOR I=0 TO 6: IF LEFT$(S$,3) <> MID$("LARLILSLISVECHAROPFRI",I*3+1,3) THEN NEXT:PRINT:PRINT"I don't understand what you mean by ";CZ$:PRINT:GOTO 100
  313. 21570 IF RZ OR ROOM <> 52 THEN PRINT:PRINT"Huh? How can I ";CZ$;"?":PRINT:GOTO 100
  314. 21580 IF AD(2,4) <> -1 THEN PRINT:PRINT"You aren't carrying a key to do that!":PRINT:GOTO 100
  315. 21590 RZ = -1:PRINT:PRINT"You free ";MN$(9):PRINT:MD(9,5)=ROOM:MD(9,14)=1:GOTO 300
  316. 22000 REM /// initialize the program!!!
  317. 22010 OPEN "I",#1,"EAMON.ART"
  318. 22011 INPUT#1,NA
  319. 22012 DIM AN$(NA+4),AD(NA+4,8)
  320. 22013 FOR A=1 TO NA:INPUT#1,AN$(A)
  321. 22014 FOR A2=1 TO 4:INPUT#1,AD(A,A2)
  322. 22015 NEXT A2:IF AD(A,2)>1 THEN FOR A2=5 TO 8:INPUT#1,AD(A,A2):NEXT A2
  323. 22016 NEXT A:CLOSE#1
  324. 22017 REM
  325. 22020 OPEN"I",#1,"EAMON.MON"
  326. 22021 INPUT#1,NM:DIM MN$(NM),MD(NM,15)
  327. 22022 FOR A=1 TO NM:INPUT#1,MN$(A)
  328. 22023 FOR A2=1 TO 12:INPUT#1,MD(A,A2)
  329. 22024 NEXT A2:NEXT A
  330. 22025 CLOSE#1
  331. 22028 ON ERROR GOTO 24000
  332. 22029 A$="FRESHMEA.T"
  333. 22030 OPEN "I",#1,A$
  334. 22031 A$="":INPUT#1,REC
  335. 22035 LINE INPUT#1,B$:GOSUB 30000
  336. 22036 CLOSE#1
  337. 22037 MN$(0)=CNAME$:MD(0,1)=HD:MD(0,2)=AG
  338. 22039 REM
  339. 22040 '
  340. 22048 OPEN "I",#1,"EAMON.ROM"
  341. 22049 LINE INPUT#1,R5$:NR=VAL(R5$)
  342. 22050 DIM MAP(NR,6)
  343. 22051 FOR ROOM=1 TO NR
  344. 22052 GOSUB 25000
  345. 22053 NEXT ROOM
  346. 22054 CLOSE#1
  347. 22059 REM
  348. 22060 OPEN"R",#2,"ROOM.NAM",32
  349. 22061 FIELD 2,32 AS R2$
  350. 22062 OPEN"R",#1,"EAMON.DES",255
  351. 22063 FIELD 1,255 AS R1$
  352. 22064 OPEN"R",#3,"EAMON.EFF",255
  353. 22065 FIELD 3,255 AS R3$
  354. 22070 CLS
  355. 22080 E1$=MN$(9)+" is tied to the altar!"
  356. 22120 NZ=NA
  357. 22121 FOR W2=1 TO 4:IF WN$(W2)="NONE" THEN 22161
  358. 22160 NA=NA+1:AN$(NA)=WN$(W2):AD(NA,2)=2:AD(NA,3)=2:AD(NA,4)=-1:AD(NA,5)=WO(W2):AD(NA,6)=WT(W2):AD(NA,7)=WD(W2):AD(NA,8)=WS(W2)
  359. 22161 NEXT W2
  360. 22165 W2=4
  361. 22166 WZ=W2
  362. 22170 EA=0:MD(0,8)=0:A2=INT(AC/2):IF A2*2<>AC THEN MD(0,8)=1:EA=-5
  363. 22180 IF A2<>0 THEN MD(0,8)=MD(0,8)+A2:EA=EA-A2*10:IF A2=3 THEN MD(0,8)=MD(0,8)+2:EA=EA-30
  364. 22190 MD(0,10)=(EA+AE)*ABS(-EA>AE)+WO(W2)+WA(WT(W2))+2*MD(0,2):MD(0,7)=0:MD(0,9)=NA:MD(0,11)=WD(W2):MD(0,12)=WS(W2)
  365. 22200 REM /// init things
  366. 22210 READ NC:DIM C$(NC):FOR C=1 TO NC:READ C$(C):NEXT C
  367. 22220 FOR S=1 TO 4:S2(S)=SA(S):NEXT S
  368. 22230 DIM V(96):ROOM=1
  369. 22232 FOR A=1 TO NA-1
  370. 22233 FOR B=A+1 TO NA:IF AN$(A)=AN$(B) THEN AN$(A)=AN$(A)+"#":GOTO 22233
  371. 22234 ' PRINT A,AN$(A),B,AN$(B)
  372. 22236 NEXT B:NEXT A
  373. 22241 PRINT:PRINT"(Hit any key to continue)  ";
  374. 22242 A$=INKEY$:IF A$="" THEN 22242
  375. 22243 PRINT:PRINT:GOTO 100
  376. 22250 DATA 38
  377. 22260 DATA GET,PICK,DROP,ATTACK,LOOK,EXAMINE,UP,U,DOWN,D,NORTH,N,EAST,E,WEST,W,SOUTH,S,POWER,HEAL,BLAST,SPEED,SMILE,WAVE,SAY,DRINK,READ,READY,ESCAPE,RETREAT,FLEE,INVENTORY,I,ENTER,OPEN,UNLOCK,RELEASE,DIG
  378. 22270 END
  379. 23000 REM /// END GAME
  380. 23010 PRINT:PRINT"(Hit any key to continue)  ";
  381. 23011 A$=INKEY$:IF A$="" THEN 23011 ELSE PRINT
  382. 23020 CLOSE#1:CLOSE#2:CLOSE#3
  383. 23030 AD(10,8)=10
  384. 23040 IF SPD THEN MD(0,2)=MD(0,2)/2
  385. 23050 IF DIE THEN 23240
  386. 23060 FOR W=2 TO 4:IF WN$(W)<>"NONE" THEN NEXT W
  387. 23070 W2=W:FOR W3=1 TO NA-1:IF AD(W3,2)>1 AND AD(W3,4)=-1 THEN WN$(W2)=AN$(W3):WP(W2)=W3:W2=W2+1:AD(W3,4)=0
  388. 23080 NEXT W3:IF W2<6 THEN 23160
  389. 23090 CLS:PRINT :PRINT :PRINT :PRINT :PRINT"As you try to enter the main hall, Sir William Missfire appears and tells you,  'You have too many weapons-- 4 is the leagal limit.'":PRINT:PRINT"Your weapons are---"
  390. 23100 FOR W4=1 TO W2-1:PRINT"    ";W4;"--";WN$(W4):NEXT W4:PRINT:PRINT"Hit the number key for one to throw away. ( 1 -";W2-1;")  ";
  391. 23110 A$=INKEY$:IF A$="" THEN 23110 ELSE W5=VAL(A$):IF W5<1 OR W5>W2-1 THEN 23110
  392. 23120 IF WP(W5)<>0 THEN AD(WP(W5),4)=-1
  393. 23130 WN$(W5)=WN$(W2-1):WP(W5)=WP(W2-1):W2=W2-1:IF W2>5 THEN 23090
  394. 23140 FOR W4=2 TO W2-1:FOR W5=1 TO W4-1:IF WN$(W4)=WN$(W5) THEN WN$(W4)=WN$(W4)+"#":GOTO 23140
  395. 23150 NEXT W5:NEXT W4
  396. 23160 FOR W=1 TO 4:IF WP(W)<>0 THEN WT(W)=AD(WP(W),6):WO(W)=AD(WP(W),5):WD(W)=AD(WP(W),7):WS(W)=AD(WP(W),8)
  397. 23170 NEXT W:CLS:LOCATE 5,1:PRINT"As you deliver your treasures to Sam Slicker, the local buyer of such things,":PRINT"he examines your goods and pays you ";
  398. 23180 TP=0:FOR A=1 TO NA-1:IF AD(A,4)<>-1 THEN 23210
  399. 23190 IF AD(A,2)<>0 THEN AD(A,1)=AD(A,1)*CH/10
  400. 23200 TP=INT(TP+AD(A,1))
  401. 23210 NEXT A:PRINT TP;"gold pieces.":PRINT
  402. 23220 GOLD=GOLD+TP
  403. 23230 PRINT:PRINT:PRINT"(Hit any key to continue)  ";
  404. 23231 A$=INKEY$:IF A$="" THEN 23231 ELSE PRINT
  405. 23240 KILL"FRESHMEA.T"
  406. 23241 A$=INKEY$:PRINT:CLS:LOCATE 5,1:PRINT"(Insert EAMON MASTER diskette, then hit any key";:IF DIE THEN PRINT")  "; ELSE PRINT " to goto Main Hall)  ";
  407. 23242 A$=INKEY$:IF A$="" THEN 23242
  408. 23250 ON ERROR GOTO 24000
  409. 23251 IF DIE THEN KILL"ADVENTUR.ER":END
  410. 23260 OPEN"R",#1,"CHARACTE.RS",255
  411. 23261 GOSUB 30600
  412. 23262 FIELD 1,255 AS R1$
  413. 23263 LSET R1$=A$
  414. 23264 PUT#1,REC+1
  415. 23270 CLOSE#1
  416. 23290 OPEN "O",#1,"ADVENTUR.ER"
  417. 23291 PRINT#1,MN$(0):PRINT#1,REC
  418. 23292 CLOSE#1
  419. 23300 RUN"MAINHALL"
  420. 23310 STOP
  421. 24000 IF ERR=53 THEN 24100
  422. 24005 PRINT "Error #";ERR
  423. 24010 PRINT "At line";ERL
  424. 24020 PRINT:PRINT"Hit any key to continue"
  425. 24030 A$=INKEY$:IF A$="" THEN 24030
  426. 24040 RESUME NEXT
  427. 24050 STOP
  428. 24100 CLS
  429. 24110 IF A$<>"FRESHMEA.T" THEN 24005
  430. 24120 CLS
  431. 24130 PRINT"You must enter this program through the EAMON program and main hall."
  432. 24140 PRINT:PRINT:STOP
  433. 25000 REM /// get room move info
  434. 25010 LINE INPUT#1,R$
  435. 25030 FOR I=1 TO 6
  436. 25040 ML=INSTR(R$,",")
  437. 25045 IF ML=0 THEN MAP(ROOM,I)=VAL(R$):R$="":GOTO 25070
  438. 25050 MAP(ROOM,I)=VAL(LEFT$(R$,ML-1))
  439. 25060 R$=MID$(R$,ML+1)
  440. 25070 NEXT I
  441. 25080 FOR I=1 TO NM:FR=MD(I,3):IF FR <> 0 AND FR <> 100 THEN FR=FR+INT((CH-10)/2)
  442. 25090 MD(I,14)=ABS(FR>100*RND(1))
  443. 25100 NEXT
  444. 25110 RETURN
  445. 28000 T1=VAL(S$)
  446. 28010 IF T1>NR OR T1<1 THEN 300
  447. 28020 R2=T1:GOTO 5100
  448. 30000 REM
  449. 30010 REM  break up record into its needed parts
  450. 30020 REM  and damned be he the first to screw up this ordered set!!!
  451. 30030 REM
  452. 30031 REM HINT: a string of 37 commas will clear all fields!
  453. 30040 REM
  454. 30050 R$=B$
  455. 30060 W=1:X=1:Y=1:IF LEN(R$)=0 THEN R$=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
  456. 30070 FOR I=1 TO 38
  457. 30075 A1$=""
  458. 30080 IF R$="" THEN 30555
  459. 30090 J=INSTR(R$,",")
  460. 30095 IF J<>0 THEN A1$=LEFT$(R$,J-1):R$=MID$(R$,J+1) ELSE IF R$<>"" THEN A1$=R$:R$=""
  461. 30100 REM
  462. 30110 REM
  463. 30120 ON I    GOTO 30170,30180,30190,30200,30210,30210,30210,30210,30250,30250
  464. 30130 ON I-10 GOTO 30250,30250,30250,30300,30310,30320,30330,30340,30350,30360
  465. 30140 ON I-20 GOTO 30370,30380,30390,30350,30360,30370,30380,30390,30350,30360
  466. 30150 ON I-30 GOTO 30370,30380,30390,30350,30360,30370,30380,30390
  467. 30160 STOP
  468. 30170 CNAME$=A1$:GOTO 30550
  469. 30180 HD=VAL(A1$):GOTO 30550
  470. 30190 AG=VAL(A1$):GOTO 30550
  471. 30200 CH=VAL(A1$):GOTO 30550
  472. 30210 SA(X)=VAL(A1$):X=X+1:GOTO 30550
  473. 30250 WA(Y)=VAL(A1$):Y=Y+1:GOTO 30550
  474. 30300 AE=VAL(A1$):GOTO 30550
  475. 30310 SEX$=A1$:GOTO 30550
  476. 30320 GOLD=VAL(A1$):GOTO 30550
  477. 30330 BANK=VAL(A1$):GOTO 30550
  478. 30340 AC=VAL(A1$):GOTO 30550
  479. 30350 WN$(W)=A1$:GOTO 30550
  480. 30360 WT(W)=VAL(A1$):GOTO 30550
  481. 30370 WO(W)=VAL(A1$):GOTO 30550
  482. 30380 WD(W)=VAL(A1$):GOTO 30550
  483. 30390 WS(W)=VAL(A1$):W=W+1:GOTO 30550
  484. 30550 REM
  485. 30555 NEXT I
  486. 30560 RETURN
  487. 30570 REM
  488. 30580 REM   pack the array with commas
  489. 30590 REM
  490. 30600 A$=CNAME$+","+STR$(HD)+","+STR$(AG)+","+STR$(CH)+","
  491. 30610 FOR I=1 TO 4:A$=A$+STR$(SA(I))+",":NEXT I
  492. 30620 FOR I=1 TO 5:A$=A$+STR$(WA(I))+",":NEXT I
  493. 30630 A$=A$+STR$(AE)+","+SEX$+","+STR$(GOLD)+","+STR$(BANK)+","+STR$(AC)
  494. 30640 FOR I=1 TO 4:A$=A$+","+WN$(I)+","
  495. 30650 A$=A$+STR$(WT(I))+","+STR$(WO(I))+","
  496. 30660 A$=A$+STR$(WD(I))+","+STR$(WS(I))
  497. 30670 NEXT I
  498. 30680 RETURN
  499. 31000 REM turn to upper case
  500. 31005 A2$=""
  501. 31010 FOR I=1 TO LEN(A$)
  502. 31020 A1$=MID$(A$,I,1)
  503. 31030 IF A1$<"a" OR A1$>"z" THEN 31047
  504. 31040 A2$=A2$+CHR$(ASC(A1$)-32)
  505. 31045 GOTO 31050
  506. 31047 A2$=A2$+A1$
  507. 31050 NEXT I
  508. 31055 A$=A2$
  509. 31060 RETURN
  510. 32000 CLS
  511.